﻿<?xml version="1.0" encoding="utf-8"?>
<xsd:schema id="wcfLanguageSchema" targetNamespace="http://schemas.microsoft.com/dsltools/wcfLanguage" elementFormDefault="qualified" xmlns="http://schemas.microsoft.com/dsltools/wcfLanguage" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <!-- ServicesDefinition -->
  <xsd:element name="servicesDefinition" type="ServicesDefinition" />
  <xsd:complexType name="ServicesDefinition">
    <xsd:annotation>
      <xsd:documentation>The root in which all other elements are embedded. Appears as a diagram.</xsd:documentation>
    </xsd:annotation>
    <xsd:sequence minOccurs="0" maxOccurs="1">
      <!-- Relationship: ServicesDefinitionHasServices -->
      <xsd:element name="services" minOccurs="0" maxOccurs="1">
        <xsd:annotation>
          <xsd:documentation>Instances of ServicesDefinitionHasServices</xsd:documentation>
        </xsd:annotation>
        <xsd:complexType>
          <xsd:sequence>
            <xsd:choice minOccurs="0" maxOccurs="unbounded" >
              <xsd:element ref="servicesDefinitionHasServices">
                <xsd:annotation>
                  <xsd:documentation>[Relationship deriving from ServicesDefinitionHasServices needs to be serialized in full-form]</xsd:documentation>
                </xsd:annotation>
              </xsd:element>
              <xsd:element ref="service" >
                <xsd:annotation>
                  <xsd:documentation>[Target role-player]</xsd:documentation>
                </xsd:annotation>
              </xsd:element>
            </xsd:choice>
          </xsd:sequence>
        </xsd:complexType>
      </xsd:element>
      <!-- Relationship: ServicesDefinitionHasInterfaces -->
      <xsd:element name="interfaces" minOccurs="0" maxOccurs="1">
        <xsd:annotation>
          <xsd:documentation>Instances of ServicesDefinitionHasInterfaces</xsd:documentation>
        </xsd:annotation>
        <xsd:complexType>
          <xsd:sequence>
            <xsd:choice minOccurs="0" maxOccurs="unbounded" >
              <xsd:element ref="servicesDefinitionHasInterfaces">
                <xsd:annotation>
                  <xsd:documentation>[Relationship deriving from ServicesDefinitionHasInterfaces needs to be serialized in full-form]</xsd:documentation>
                </xsd:annotation>
              </xsd:element>
              <xsd:element ref="interface" >
                <xsd:annotation>
                  <xsd:documentation>[Target role-player]</xsd:documentation>
                </xsd:annotation>
              </xsd:element>
            </xsd:choice>
          </xsd:sequence>
        </xsd:complexType>
      </xsd:element>
      <!-- Relationship: ServicesDefinitionHasHosting -->
      <xsd:element name="hosting" minOccurs="0" maxOccurs="1">
        <xsd:annotation>
          <xsd:documentation>Instances of ServicesDefinitionHasHosting</xsd:documentation>
        </xsd:annotation>
        <xsd:complexType>
          <xsd:sequence>
            <xsd:choice minOccurs="0" maxOccurs="unbounded" >
              <xsd:element ref="servicesDefinitionHasHosting">
                <xsd:annotation>
                  <xsd:documentation>[Relationship deriving from ServicesDefinitionHasHosting needs to be serialized in full-form]</xsd:documentation>
                </xsd:annotation>
              </xsd:element>
              <xsd:element ref="hosting" >
                <xsd:annotation>
                  <xsd:documentation>[Target role-player]</xsd:documentation>
                </xsd:annotation>
              </xsd:element>
            </xsd:choice>
          </xsd:sequence>
        </xsd:complexType>
      </xsd:element>
      <!-- Relationship: ServicesDefinitionHasDataClasses -->
      <xsd:element name="dataClasses" minOccurs="0" maxOccurs="1">
        <xsd:annotation>
          <xsd:documentation>Instances of ServicesDefinitionHasDataClasses</xsd:documentation>
        </xsd:annotation>
        <xsd:complexType>
          <xsd:sequence>
            <xsd:choice minOccurs="0" maxOccurs="unbounded" >
              <xsd:element ref="servicesDefinitionHasDataClasses">
                <xsd:annotation>
                  <xsd:documentation>[Relationship deriving from ServicesDefinitionHasDataClasses needs to be serialized in full-form]</xsd:documentation>
                </xsd:annotation>
              </xsd:element>
              <xsd:element ref="dataClass" >
                <xsd:annotation>
                  <xsd:documentation>[Target role-player]</xsd:documentation>
                </xsd:annotation>
              </xsd:element>
            </xsd:choice>
          </xsd:sequence>
        </xsd:complexType>
      </xsd:element>
    </xsd:sequence>
    <!-- Id -->
    <xsd:attribute name="Id" type="xsd:string">
      <xsd:annotation>
        <xsd:documentation>Instance Guid of this element, needed because SerializeId is set to true.</xsd:documentation>
      </xsd:annotation>
    </xsd:attribute>
    <!-- dslVersion -->
    <xsd:attribute name="dslVersion" type="xsd:string">
      <xsd:annotation>
        <xsd:documentation>Version of the model serialized in this file.</xsd:documentation>
      </xsd:annotation>
    </xsd:attribute>
  </xsd:complexType>
  
  <!-- ServicesDefinition Moniker -->
  <xsd:element name="servicesDefinitionMoniker" type="ServicesDefinitionMoniker" />
  <xsd:complexType name="ServicesDefinitionMoniker">
    <xsd:annotation>
      <xsd:documentation>Moniker for ServicesDefinition instance.</xsd:documentation>
    </xsd:annotation>
    <xsd:attribute name="Id" type="xsd:string" >
      <xsd:annotation>
        <xsd:documentation>Attribute to store the moniker string.</xsd:documentation>
      </xsd:annotation>
    </xsd:attribute>
  </xsd:complexType>
  
  <!-- ServiceContract -->
  <xsd:element name="serviceContract" type="ServiceContract" substitutionGroup="interface" />
  <xsd:complexType name="ServiceContract">
    <xsd:annotation>
      <xsd:documentation>interface defining a service contract in a Windows Communication Foundation (WCF) application. </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="Interface">
        <xsd:sequence minOccurs="0" maxOccurs="1">
          <!-- Relationship: ServiceContractReferencesCallbackContract -->
          <xsd:element name="callbackContract" minOccurs="0" maxOccurs="1">
            <xsd:annotation>
              <xsd:documentation>Instance of ServiceContractReferencesCallbackContract</xsd:documentation>
            </xsd:annotation>
            <xsd:complexType>
              <xsd:sequence>
                <xsd:choice minOccurs="0" maxOccurs="1" >
                  <xsd:element ref="serviceContractReferencesCallbackContract">
                    <xsd:annotation>
                      <xsd:documentation>[Relationship deriving from ServiceContractReferencesCallbackContract needs to be serialized in full-form]</xsd:documentation>
                    </xsd:annotation>
                  </xsd:element>
                  <xsd:element ref="serviceContractMoniker" >
                    <xsd:annotation>
                      <xsd:documentation>[Target role-player]</xsd:documentation>
                    </xsd:annotation>
                  </xsd:element>
                </xsd:choice>
              </xsd:sequence>
            </xsd:complexType>
          </xsd:element>
          <!-- Relationship: ServiceContractReferencesDataContracts -->
          <xsd:element name="referencedDataClasses" minOccurs="0" maxOccurs="1">
            <xsd:annotation>
              <xsd:documentation>Instances of ServiceContractReferencesDataContracts</xsd:documentation>
            </xsd:annotation>
            <xsd:complexType>
              <xsd:sequence>
                <xsd:choice minOccurs="0" maxOccurs="unbounded" >
                  <xsd:element ref="serviceContractReferencesDataContracts">
                    <xsd:annotation>
                      <xsd:documentation>[Relationship deriving from ServiceContractReferencesDataContracts needs to be serialized in full-form]</xsd:documentation>
                    </xsd:annotation>
                  </xsd:element>
                  <xsd:element ref="dataClassMoniker" >
                    <xsd:annotation>
                      <xsd:documentation>[Target role-player]</xsd:documentation>
                    </xsd:annotation>
                  </xsd:element>
                </xsd:choice>
              </xsd:sequence>
            </xsd:complexType>
          </xsd:element>
        </xsd:sequence>
        <!-- Property: ProtectionLevel -->
        <xsd:attribute name="protectionLevel" type="xsd:string" >
          <xsd:annotation>
            <xsd:documentation>name used to locate the service in an application configuration file. . The default is the name of the service implementation class.</xsd:documentation>
          </xsd:annotation>
        </xsd:attribute>
        <!-- Property: SessionMode -->
        <xsd:attribute name="sessionMode" type="xsd:string" >
          <xsd:annotation>
            <xsd:documentation>Tells whether sessions are allowed, not allowed or required.</xsd:documentation>
          </xsd:annotation>
        </xsd:attribute>
        <!-- Property: ConfigurationName -->
        <xsd:attribute name="configurationName" type="xsd:string" >
          <xsd:annotation>
            <xsd:documentation>Name used to locate the service in an application configuration file. The name used to locate the service element in an application configuration file. The default is the name of the service implementation class</xsd:documentation>
          </xsd:annotation>
        </xsd:attribute>
        <!-- Property: ServiceContractNamespace -->
        <xsd:attribute name="serviceContractNamespace" type="xsd:string" >
          <xsd:annotation>
            <xsd:documentation>namespace of the &lt;portType&gt; element in Web Services Description Language (WSDL). The default value is the name of the class or interface</xsd:documentation>
          </xsd:annotation>
        </xsd:attribute>
        <!-- Property: ServiceContractName -->
        <xsd:attribute name="serviceContractName" type="xsd:string" >
          <xsd:annotation>
            <xsd:documentation>name for the &lt;portType&gt; element in Web Services Description Language (WSDL). The default value is the name of the class or interface</xsd:documentation>
          </xsd:annotation>
        </xsd:attribute>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  
  <!-- ServiceContract Moniker -->
  <xsd:element name="serviceContractMoniker" type="ServiceContractMoniker" substitutionGroup="interfaceMoniker" />
  <xsd:complexType name="ServiceContractMoniker">
    <xsd:annotation>
      <xsd:documentation>Moniker for ServiceContract instance.</xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="InterfaceMoniker">
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  
  <!-- OperationContract -->
  <xsd:element name="operationContract" type="OperationContract" substitutionGroup="method" />
  <xsd:complexType name="OperationContract">
    <xsd:annotation>
      <xsd:documentation>Method defining an operation that is part of a service contract in a Windows Communication Foundation (WCF) application</xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="Method">
        <!-- Property: Action -->
        <xsd:attribute name="action" type="xsd:string" >
          <xsd:annotation>
            <xsd:documentation>WS-Addressing action of the request message (used in generating the WS-Addressing Action header)</xsd:documentation>
          </xsd:annotation>
        </xsd:attribute>
        <!-- Property: AsyncPattern -->
        <xsd:attribute name="asyncPattern" type="xsd:boolean" >
          <xsd:annotation>
            <xsd:documentation>Indicates that an operation is implemented asynchronously using a Begin&lt;methodName&gt; and End&lt;methodName&gt; method pair in a service contract.  true if the Begin&lt;methodName&gt;method is matched by an End&lt;methodName&gt; method and can be treated by the infrastructure as an operation that is implemented as an asynchronous method pair on the service interface; otherwise, false. The default is false.</xsd:documentation>
          </xsd:annotation>
        </xsd:attribute>
        <!-- Property: IsInitiating -->
        <xsd:attribute name="isInitiating" type="xsd:boolean" >
          <xsd:annotation>
            <xsd:documentation>Indicates whether the method implements an operation that can initiate a session on the server (if such a session exists). true if the operation is permitted to initiate a session on the server, otherwise, false. The default is true</xsd:documentation>
          </xsd:annotation>
        </xsd:attribute>
        <!-- Property: IsOneWay -->
        <xsd:attribute name="isOneWay" type="xsd:boolean" >
          <xsd:annotation>
            <xsd:documentation> indicates whether an operation returns a reply message. true if this method receives a request message and returns no reply message; otherwise, false. The default is false.</xsd:documentation>
          </xsd:annotation>
        </xsd:attribute>
        <!-- Property: IsTerminating -->
        <xsd:attribute name="isTerminating" type="xsd:boolean" >
          <xsd:annotation>
            <xsd:documentation> indicates whether the service operation causes the server to close the session after the reply message, if any, is sent. true if the operation causes the server to close the session, otherwise, false. The default is false.</xsd:documentation>
          </xsd:annotation>
        </xsd:attribute>
        <!-- Property: ProtectionLevel -->
        <xsd:attribute name="protectionLevel" type="xsd:string" >
          <xsd:annotation>
            <xsd:documentation> value that specifies whether the messages of an operation must be encrypted, signed, or both. Default is None</xsd:documentation>
          </xsd:annotation>
        </xsd:attribute>
        <!-- Property: ReplyAction -->
        <xsd:attribute name="replyAction" type="xsd:string" >
          <xsd:annotation>
            <xsd:documentation>the value of the SOAP action for the reply message of the operation.</xsd:documentation>
          </xsd:annotation>
        </xsd:attribute>
        <!-- Property: OperationContractName -->
        <xsd:attribute name="operationContractName" type="xsd:string" >
          <xsd:annotation>
            <xsd:documentation>name of the operation.</xsd:documentation>
          </xsd:annotation>
        </xsd:attribute>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  
  <!-- OperationContract Moniker -->
  <xsd:element name="operationContractMoniker" abstract="true" type="OperationContractMoniker" substitutionGroup="methodMoniker" />
  <xsd:complexType name="OperationContractMoniker">
    <xsd:annotation>
      <xsd:documentation>Moniker for OperationContract instance.</xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="MethodMoniker">
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  
  <!-- Service -->
  <xsd:element name="service" type="Service" substitutionGroup="typeOfInterest" />
  <xsd:complexType name="Service">
    <xsd:annotation>
      <xsd:documentation>service contract implementation.</xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="TypeOfInterest">
        <xsd:sequence minOccurs="0" maxOccurs="1">
          <!-- Relationship: ServiceReferencesImplementedServiceContracts -->
          <xsd:element name="implementedServiceContracts" minOccurs="0" maxOccurs="1">
            <xsd:annotation>
              <xsd:documentation>Instances of ServiceReferencesImplementedServiceContracts</xsd:documentation>
            </xsd:annotation>
            <xsd:complexType>
              <xsd:sequence>
                <xsd:choice minOccurs="0" maxOccurs="unbounded" >
                  <xsd:element ref="serviceReferencesImplementedServiceContracts">
                    <xsd:annotation>
                      <xsd:documentation>[Relationship deriving from ServiceReferencesImplementedServiceContracts needs to be serialized in full-form]</xsd:documentation>
                    </xsd:annotation>
                  </xsd:element>
                  <xsd:element ref="serviceContractMoniker" >
                    <xsd:annotation>
                      <xsd:documentation>[Target role-player]</xsd:documentation>
                    </xsd:annotation>
                  </xsd:element>
                </xsd:choice>
              </xsd:sequence>
            </xsd:complexType>
          </xsd:element>
        </xsd:sequence>
        <!-- Property: AddressFilterMode -->
        <xsd:attribute name="addressFilterMode" type="xsd:string" >
          <xsd:annotation>
            <xsd:documentation>Gets or sets the AddressFilterMode that is used by the dispatcher to route incoming messages to the correct endpoint</xsd:documentation>
          </xsd:annotation>
        </xsd:attribute>
        <!-- Property: AutomaticSessionShutdown -->
        <xsd:attribute name="automaticSessionShutdown" type="xsd:boolean" >
          <xsd:annotation>
            <xsd:documentation>Specifies whether to automatically close a session when a client closes an output session.</xsd:documentation>
          </xsd:annotation>
        </xsd:attribute>
        <!-- Property: ConcurrencyMode -->
        <xsd:attribute name="concurrencyMode" type="xsd:string" >
          <xsd:annotation>
            <xsd:documentation>Gets or sets whether a service supports one thread, multiple threads, or reentrant calls. </xsd:documentation>
          </xsd:annotation>
        </xsd:attribute>
        <!-- Property: ConfigurationName -->
        <xsd:attribute name="configurationName" type="xsd:string" >
          <xsd:annotation>
            <xsd:documentation>Gets or sets the value used to locate the service element in an application configuration file.</xsd:documentation>
          </xsd:annotation>
        </xsd:attribute>
        <!-- Property: IgnoreExtensionDataObject -->
        <xsd:attribute name="ignoreExtensionDataObject" type="xsd:boolean" >
          <xsd:annotation>
            <xsd:documentation>Gets or sets a value that specifies whether to send unknown serialization data onto the wire.</xsd:documentation>
          </xsd:annotation>
        </xsd:attribute>
        <!-- Property: IncludeExceptionDetailInFaults -->
        <xsd:attribute name="includeExceptionDetailInFaults" type="xsd:boolean" >
          <xsd:annotation>
            <xsd:documentation>Gets or sets a value that specifies that general unhandled execution exceptions are to be converted into a System.ServiceModel.FaultException of type System.ServiceModel.ExceptionDetail and sent as a fault message. Set this to true only during development to troubleshoot a service.</xsd:documentation>
          </xsd:annotation>
        </xsd:attribute>
        <!-- Property: InstanceContextMode -->
        <xsd:attribute name="instanceContextMode" type="xsd:string" >
          <xsd:annotation>
            <xsd:documentation>Gets or sets the value that indicates when new service objects are created. </xsd:documentation>
          </xsd:annotation>
        </xsd:attribute>
        <!-- Property: MaxItemsInObjectGraph -->
        <xsd:attribute name="maxItemsInObjectGraph" type="xsd:integer" >
          <xsd:annotation>
            <xsd:documentation>Gets or sets the maximum number of items allowed in a serialized object</xsd:documentation>
          </xsd:annotation>
        </xsd:attribute>
        <!-- Property: ReleaseServiceInstanceOnTransactionComplete -->
        <xsd:attribute name="releaseServiceInstanceOnTransactionComplete" type="xsd:boolean" >
          <xsd:annotation>
            <xsd:documentation>Gets or sets a value that specifies whether the service object is recycled when the current transaction completes. </xsd:documentation>
          </xsd:annotation>
        </xsd:attribute>
        <!-- Property: TransactionAutoCompleteOnSessionClose -->
        <xsd:attribute name="transactionAutoCompleteOnSessionClose" type="xsd:boolean" >
          <xsd:annotation>
            <xsd:documentation>Gets or sets a value that specifies whether pending transactions are completed when the current session closes without error</xsd:documentation>
          </xsd:annotation>
        </xsd:attribute>
        <!-- Property: TransactionIsolationLevel -->
        <xsd:attribute name="transactionIsolationLevel" type="xsd:string" >
          <xsd:annotation>
            <xsd:documentation>Specifies the transaction isolation level for new transactions created inside the service, and incoming transactions flowed from a client. </xsd:documentation>
          </xsd:annotation>
        </xsd:attribute>
        <!-- Property: TransactionTimeout -->
        <xsd:attribute name="transactionTimeout" type="xsd:string" >
          <xsd:annotation>
            <xsd:documentation>period within which a transaction must complete.</xsd:documentation>
          </xsd:annotation>
        </xsd:attribute>
        <!-- Property: UseSynchronizationContext -->
        <xsd:attribute name="useSynchronizationContext" type="xsd:boolean" >
          <xsd:annotation>
            <xsd:documentation>Gets or sets a value that specifies whether to use the current synchronization context to choose the thread of execution</xsd:documentation>
          </xsd:annotation>
        </xsd:attribute>
        <!-- Property: ValidateMustUnderstand -->
        <xsd:attribute name="validateMustUnderstand" type="xsd:boolean" >
          <xsd:annotation>
            <xsd:documentation>Gets or sets a value that specifies whether the system or the application enforces SOAP MustUnderstand header processing.</xsd:documentation>
          </xsd:annotation>
        </xsd:attribute>
        <!-- Property: WSDLName -->
        <xsd:attribute name="wSDLName" type="xsd:string" >
          <xsd:annotation>
            <xsd:documentation>Gets or sets the value of the name attribute in the service element in Web Services Description Language (WSDL), that is the value of the name attribute in the &lt;wsdl:service&gt; element when exported. </xsd:documentation>
          </xsd:annotation>
        </xsd:attribute>
        <!-- Property: WSDLNamespace -->
        <xsd:attribute name="wSDLNamespace" type="xsd:string" >
          <xsd:annotation>
            <xsd:documentation>Gets or sets the value of the target namespace for the service in Web Services Description Language (WSDL), that is the value of the targetNamespace attribute for the &lt;wsdl:definitions&gt; element that contains the &lt;wsdl:service&gt; element. </xsd:documentation>
          </xsd:annotation>
        </xsd:attribute>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  
  <!-- Service Moniker -->
  <xsd:element name="serviceMoniker" type="ServiceMoniker" substitutionGroup="typeOfInterestMoniker" />
  <xsd:complexType name="ServiceMoniker">
    <xsd:annotation>
      <xsd:documentation>Moniker for Service instance.</xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="TypeOfInterestMoniker">
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  
  <!-- Interface -->
  <xsd:element name="interface" type="Interface" substitutionGroup="typeOfInterest" />
  <xsd:complexType name="Interface">
    <xsd:annotation>
      <xsd:documentation>.NET Interface</xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="TypeOfInterest">
        <xsd:sequence minOccurs="0" maxOccurs="1">
          <!-- Relationship: InterfaceHasMethods -->
          <xsd:element name="methods" minOccurs="0" maxOccurs="1">
            <xsd:annotation>
              <xsd:documentation>Instances of InterfaceHasMethods</xsd:documentation>
            </xsd:annotation>
            <xsd:complexType>
              <xsd:sequence>
                <xsd:choice minOccurs="0" maxOccurs="unbounded" >
                  <xsd:element ref="interfaceHasMethods">
                    <xsd:annotation>
                      <xsd:documentation>[Relationship deriving from InterfaceHasMethods needs to be serialized in full-form]</xsd:documentation>
                    </xsd:annotation>
                  </xsd:element>
                  <xsd:element ref="method" >
                    <xsd:annotation>
                      <xsd:documentation>[Target role-player]</xsd:documentation>
                    </xsd:annotation>
                  </xsd:element>
                </xsd:choice>
              </xsd:sequence>
            </xsd:complexType>
          </xsd:element>
        </xsd:sequence>
        <!-- Property: IsServiceContract -->
        <xsd:attribute name="isServiceContract" type="xsd:boolean" >
          <xsd:annotation>
            <xsd:documentation>Indicates that the interface or class defines a WCF service contract in a application.</xsd:documentation>
          </xsd:annotation>
        </xsd:attribute>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  
  <!-- Interface Moniker -->
  <xsd:element name="interfaceMoniker" type="InterfaceMoniker" substitutionGroup="typeOfInterestMoniker" />
  <xsd:complexType name="InterfaceMoniker">
    <xsd:annotation>
      <xsd:documentation>Moniker for Interface instance.</xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="TypeOfInterestMoniker">
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  
  <!-- Method -->
  <xsd:element name="method" type="Method" />
  <xsd:complexType name="Method">
    <xsd:annotation>
      <xsd:documentation>Method of the interface</xsd:documentation>
    </xsd:annotation>
    <!-- Property: Name -->
    <xsd:attribute name="name" type="xsd:string" >
      <xsd:annotation>
        <xsd:documentation>Name of the method</xsd:documentation>
      </xsd:annotation>
    </xsd:attribute>
    <!-- Property: Signature -->
    <xsd:attribute name="signature" type="xsd:string" >
      <xsd:annotation>
        <xsd:documentation>Signature of the method</xsd:documentation>
      </xsd:annotation>
    </xsd:attribute>
    <!-- Property: IsOperationContract -->
    <xsd:attribute name="isOperationContract" type="xsd:boolean" >
      <xsd:annotation>
        <xsd:documentation>Indicates that this method defines an operation that is part of a service contract in a application.</xsd:documentation>
      </xsd:annotation>
    </xsd:attribute>
    <!-- Property: Label -->
    <xsd:attribute name="label" type="xsd:string" >
      <xsd:annotation>
        <xsd:documentation>Label with which the method is displayed</xsd:documentation>
      </xsd:annotation>
    </xsd:attribute>
    <!-- Property: Prototype -->
    <xsd:attribute name="prototype" type="xsd:string" >
      <xsd:annotation>
        <xsd:documentation>Prototype of the method</xsd:documentation>
      </xsd:annotation>
    </xsd:attribute>
  </xsd:complexType>
  
  <!-- Method Moniker -->
  <xsd:element name="methodMoniker" abstract="true" type="MethodMoniker" />
  <xsd:complexType name="MethodMoniker">
    <xsd:annotation>
      <xsd:documentation>Moniker for Method instance.</xsd:documentation>
    </xsd:annotation>
  </xsd:complexType>
  
  <!-- DataContract -->
  <xsd:element name="dataContract" type="DataContract" substitutionGroup="dataClass" />
  <xsd:complexType name="DataContract">
    <xsd:annotation>
      <xsd:documentation>This type implements a data contract and is serializable by a serializer, such as the DataContractSerializer. </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="DataClass">
        <!-- Property: IsDataContract -->
        <xsd:attribute name="isDataContract" type="xsd:boolean" >
          <xsd:annotation>
            <xsd:documentation>Is the class a DataContract or not ?</xsd:documentation>
          </xsd:annotation>
        </xsd:attribute>
        <!-- Property: DataContractName -->
        <xsd:attribute name="dataContractName" type="xsd:string" >
          <xsd:annotation>
            <xsd:documentation>name of the data contract for the type</xsd:documentation>
          </xsd:annotation>
        </xsd:attribute>
        <!-- Property: DataContractNamespace -->
        <xsd:attribute name="dataContractNamespace" type="xsd:string" >
          <xsd:annotation>
            <xsd:documentation>namespace for the data contract for the type.</xsd:documentation>
          </xsd:annotation>
        </xsd:attribute>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  
  <!-- DataContract Moniker -->
  <xsd:element name="dataContractMoniker" type="DataContractMoniker" substitutionGroup="dataClassMoniker" />
  <xsd:complexType name="DataContractMoniker">
    <xsd:annotation>
      <xsd:documentation>Moniker for DataContract instance.</xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="DataClassMoniker">
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  
  <!-- TypeOfInterest -->
  <xsd:element name="typeOfInterest" abstract="true" type="TypeOfInterest" />
  <xsd:complexType name="TypeOfInterest" abstract="true" >
    <xsd:annotation>
      <xsd:documentation>Abstract base class for types of interest in the model</xsd:documentation>
    </xsd:annotation>
    <!-- Property: Name -->
    <xsd:attribute name="name" type="xsd:string" use="required" >
      <xsd:annotation>
        <xsd:documentation>Name of the type</xsd:documentation>
      </xsd:annotation>
    </xsd:attribute>
    <!-- Property: Namespace -->
    <xsd:attribute name="namespace" type="xsd:string" >
      <xsd:annotation>
        <xsd:documentation>Namespace of the type (in the code)</xsd:documentation>
      </xsd:annotation>
    </xsd:attribute>
    <!-- Property: FullName -->
    <xsd:attribute name="fullName" type="xsd:string" >
      <xsd:annotation>
        <xsd:documentation>Fully qualifiied name for the type</xsd:documentation>
      </xsd:annotation>
    </xsd:attribute>
  </xsd:complexType>
  
  <!-- TypeOfInterest Moniker -->
  <xsd:element name="typeOfInterestMoniker" abstract="true" type="TypeOfInterestMoniker" />
  <xsd:complexType name="TypeOfInterestMoniker">
    <xsd:annotation>
      <xsd:documentation>Moniker for TypeOfInterest instance.</xsd:documentation>
    </xsd:annotation>
    <xsd:attribute name="name" type="xsd:string" >
      <xsd:annotation>
        <xsd:documentation>Attribute to store the moniker string.</xsd:documentation>
      </xsd:annotation>
    </xsd:attribute>
  </xsd:complexType>
  
  <!-- DataMember -->
  <xsd:element name="dataMember" type="DataMember" substitutionGroup="fieldOrProperty" />
  <xsd:complexType name="DataMember">
    <xsd:annotation>
      <xsd:documentation>This member is part of a data contract and is serializable by the DataContractSerializer</xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="FieldOrProperty">
        <!-- Property: IsDataMember -->
        <xsd:attribute name="isDataMember" type="xsd:boolean" >
          <xsd:annotation>
            <xsd:documentation>Is the member a DataMember of a DataContract ?</xsd:documentation>
          </xsd:annotation>
        </xsd:attribute>
        <!-- Property: DataMemberName -->
        <xsd:attribute name="dataMemberName" type="xsd:string" >
          <xsd:annotation>
            <xsd:documentation>data member name. </xsd:documentation>
          </xsd:annotation>
        </xsd:attribute>
        <!-- Property: IsRequired -->
        <xsd:attribute name="isRequired" type="xsd:boolean" >
          <xsd:annotation>
            <xsd:documentation>value that instructs the serialization engine that the member must be present when reading or deserializing.</xsd:documentation>
          </xsd:annotation>
        </xsd:attribute>
        <!-- Property: Order -->
        <xsd:attribute name="order" type="xsd:integer" >
          <xsd:annotation>
            <xsd:documentation>Gets or sets the order of serialization and deserialization of a member. </xsd:documentation>
          </xsd:annotation>
        </xsd:attribute>
        <!-- Property: EmitDefaultValue -->
        <xsd:attribute name="emitDefaultValue" type="xsd:boolean" >
          <xsd:annotation>
            <xsd:documentation>Gets or sets a value that specifies whether to serialize the default value for a field or property being serialized. </xsd:documentation>
          </xsd:annotation>
        </xsd:attribute>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  
  <!-- DataMember Moniker -->
  <xsd:element name="dataMemberMoniker" type="DataMemberMoniker" substitutionGroup="fieldOrPropertyMoniker" />
  <xsd:complexType name="DataMemberMoniker">
    <xsd:annotation>
      <xsd:documentation>Moniker for DataMember instance.</xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="FieldOrPropertyMoniker">
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  
  <!-- Hosting -->
  <xsd:element name="hosting" type="Hosting" substitutionGroup="typeOfInterest" />
  <xsd:complexType name="Hosting">
    <xsd:annotation>
      <xsd:documentation>Class hosting one or several services.</xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="TypeOfInterest">
        <xsd:sequence minOccurs="0" maxOccurs="1">
          <!-- Relationship: HostingReferencesHostedServices -->
          <xsd:element name="hostedServices" minOccurs="0" maxOccurs="1">
            <xsd:annotation>
              <xsd:documentation>Instances of HostingReferencesHostedServices</xsd:documentation>
            </xsd:annotation>
            <xsd:complexType>
              <xsd:sequence>
                <xsd:choice minOccurs="0" maxOccurs="unbounded" >
                  <xsd:element ref="hostingReferencesHostedServices">
                    <xsd:annotation>
                      <xsd:documentation>[Relationship deriving from HostingReferencesHostedServices needs to be serialized in full-form]</xsd:documentation>
                    </xsd:annotation>
                  </xsd:element>
                  <xsd:element ref="serviceMoniker" >
                    <xsd:annotation>
                      <xsd:documentation>[Target role-player]</xsd:documentation>
                    </xsd:annotation>
                  </xsd:element>
                </xsd:choice>
              </xsd:sequence>
            </xsd:complexType>
          </xsd:element>
        </xsd:sequence>
        <!-- Property: Kind -->
        <xsd:attribute name="kind" type="HostingKind" >
          <xsd:annotation>
            <xsd:documentation>Kind of hosting (Console, IIS, WAS, NT Service)</xsd:documentation>
          </xsd:annotation>
        </xsd:attribute>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  
  <!-- Hosting Moniker -->
  <xsd:element name="hostingMoniker" type="HostingMoniker" substitutionGroup="typeOfInterestMoniker" />
  <xsd:complexType name="HostingMoniker">
    <xsd:annotation>
      <xsd:documentation>Moniker for Hosting instance.</xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="TypeOfInterestMoniker">
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  
  <!-- MessageContract -->
  <xsd:element name="messageContract" type="MessageContract" substitutionGroup="dataClass" />
  <xsd:complexType name="MessageContract">
    <xsd:annotation>
      <xsd:documentation>Defines a strongly-typed class that corresponds to a SOAP message. </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="DataClass">
        <!-- Property: IsWrapped -->
        <xsd:attribute name="isWrapped" type="xsd:boolean" >
          <xsd:annotation>
            <xsd:documentation>Gets or sets a value that specifies whether the message body has a wrapper element. true if the message body has a wrapper element; otherwise, false. The default is true</xsd:documentation>
          </xsd:annotation>
        </xsd:attribute>
        <!-- Property: ProtectionLevel -->
        <xsd:attribute name="protectionLevel" type="xsd:string" >
          <xsd:annotation>
            <xsd:documentation>Gets or sets a value that specified whether the message must be encrypted, signed, or both. </xsd:documentation>
          </xsd:annotation>
        </xsd:attribute>
        <!-- Property: WrapperName -->
        <xsd:attribute name="wrapperName" type="xsd:string" >
          <xsd:annotation>
            <xsd:documentation>Gets or sets the name of the wrapper element of the message body</xsd:documentation>
          </xsd:annotation>
        </xsd:attribute>
        <!-- Property: WrapperNamespace -->
        <xsd:attribute name="wrapperNamespace" type="xsd:string" >
          <xsd:annotation>
            <xsd:documentation>Gets or sets the namespace of the message body wrapper element. </xsd:documentation>
          </xsd:annotation>
        </xsd:attribute>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  
  <!-- MessageContract Moniker -->
  <xsd:element name="messageContractMoniker" type="MessageContractMoniker" substitutionGroup="dataClassMoniker" />
  <xsd:complexType name="MessageContractMoniker">
    <xsd:annotation>
      <xsd:documentation>Moniker for MessageContract instance.</xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="DataClassMoniker">
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  
  <!-- MessageMember -->
  <xsd:element name="messageMember" type="MessageMember" substitutionGroup="fieldOrProperty" />
  <xsd:complexType name="MessageMember">
    <xsd:annotation>
      <xsd:documentation>Member of a message contract (Field, Property, Message body element, Message header element)</xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="FieldOrProperty">
        <!-- Property: ProtectionLevel -->
        <xsd:attribute name="protectionLevel" type="xsd:string" />
        <!-- Property: WCFName -->
        <xsd:attribute name="wCFName" type="xsd:string" >
          <xsd:annotation>
            <xsd:documentation>Specifies the name of the element that corresponds to this member</xsd:documentation>
          </xsd:annotation>
        </xsd:attribute>
        <!-- Property: WCFNamespace -->
        <xsd:attribute name="wCFNamespace" type="xsd:string" >
          <xsd:annotation>
            <xsd:documentation>Specifies the namespace of the element that corresponds to this member. </xsd:documentation>
          </xsd:annotation>
        </xsd:attribute>
        <!-- Property: Order -->
        <xsd:attribute name="order" type="xsd:integer" >
          <xsd:annotation>
            <xsd:documentation>Gets or sets a value that indicates the position in which the member is serialized into the SOAP body. Use the Order property to specify the location of a data member in the SOAP body element. The value is not required to be consecutive, because it does not represent the position of the member, only the sorting key. The order of the body elements is alphabetical by default. The semantics of this property are the same as the semantics of the Order property. </xsd:documentation>
          </xsd:annotation>
        </xsd:attribute>
        <!-- Property: MessageMemberKind -->
        <xsd:attribute name="messageMemberKind" type="MessageMemberKind" >
          <xsd:annotation>
            <xsd:documentation>Kind of message member</xsd:documentation>
          </xsd:annotation>
        </xsd:attribute>
        <!-- Property: Actor -->
        <xsd:attribute name="actor" type="xsd:string" >
          <xsd:annotation>
            <xsd:documentation>Gets or sets a URI that indicates the node at which this header is targeted. Maps to the role header attribute when SOAP 1.2 is used and the actor header attribute when SOAP 1.1 is used</xsd:documentation>
          </xsd:annotation>
        </xsd:attribute>
        <!-- Property: MustUnderstand -->
        <xsd:attribute name="mustUnderstand" type="xsd:boolean" >
          <xsd:annotation>
            <xsd:documentation>Specifies whether the node acting in the Actor role must understand this header. This is mapped to the mustUnderstand SOAP header attribute. </xsd:documentation>
          </xsd:annotation>
        </xsd:attribute>
        <!-- Property: Relay -->
        <xsd:attribute name="relay" type="xsd:boolean" >
          <xsd:annotation>
            <xsd:documentation>Specifies whether this header is to be relayed to downstream nodes. This is mapped to the relay SOAP header attribute</xsd:documentation>
          </xsd:annotation>
        </xsd:attribute>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  
  <!-- MessageMember Moniker -->
  <xsd:element name="messageMemberMoniker" type="MessageMemberMoniker" substitutionGroup="fieldOrPropertyMoniker" />
  <xsd:complexType name="MessageMemberMoniker">
    <xsd:annotation>
      <xsd:documentation>Moniker for MessageMember instance.</xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="FieldOrPropertyMoniker">
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  
  <!-- FieldOrProperty -->
  <xsd:element name="fieldOrProperty" abstract="true" type="FieldOrProperty" />
  <xsd:complexType name="FieldOrProperty" abstract="true" >
    <xsd:annotation>
      <xsd:documentation>Data member implemented as a field or a property</xsd:documentation>
    </xsd:annotation>
    <!-- Property: Name -->
    <xsd:attribute name="name" type="xsd:string" use="required" >
      <xsd:annotation>
        <xsd:documentation>Name of the member</xsd:documentation>
      </xsd:annotation>
    </xsd:attribute>
    <!-- Property: MemberFullTypeName -->
    <xsd:attribute name="memberFullTypeName" type="xsd:string" >
      <xsd:annotation>
        <xsd:documentation>Fully qualified type name of the member</xsd:documentation>
      </xsd:annotation>
    </xsd:attribute>
    <!-- Property: Visibility -->
    <xsd:attribute name="visibility" type="Visibility" >
      <xsd:annotation>
        <xsd:documentation>Visibility of the member (public, private, protected, internal, ...)</xsd:documentation>
      </xsd:annotation>
    </xsd:attribute>
    <!-- Property: Kind -->
    <xsd:attribute name="kind" type="DataMemberKind" >
      <xsd:annotation>
        <xsd:documentation>Is the member a field or a property ?</xsd:documentation>
      </xsd:annotation>
    </xsd:attribute>
    <!-- Property: Representation -->
    <xsd:attribute name="representation" type="RepresentationKind" >
      <xsd:annotation>
        <xsd:documentation>How this member is represented on the diagram (as a shape member, as a relatiionship role, or hidden)</xsd:documentation>
      </xsd:annotation>
    </xsd:attribute>
  </xsd:complexType>
  
  <!-- FieldOrProperty Moniker -->
  <xsd:element name="fieldOrPropertyMoniker" abstract="true" type="FieldOrPropertyMoniker" />
  <xsd:complexType name="FieldOrPropertyMoniker">
    <xsd:annotation>
      <xsd:documentation>Moniker for FieldOrProperty instance.</xsd:documentation>
    </xsd:annotation>
    <xsd:attribute name="name" type="xsd:string" >
      <xsd:annotation>
        <xsd:documentation>Attribute to store the moniker string.</xsd:documentation>
      </xsd:annotation>
    </xsd:attribute>
  </xsd:complexType>
  
  <!-- DataClass -->
  <xsd:element name="dataClass" abstract="true" type="DataClass" substitutionGroup="typeOfInterest" />
  <xsd:complexType name="DataClass" abstract="true" >
    <xsd:annotation>
      <xsd:documentation>Abstract base class for concepts holding data</xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="TypeOfInterest">
        <xsd:sequence minOccurs="0" maxOccurs="1">
          <!-- Relationship: DataClassHasMembers -->
          <xsd:element name="members" minOccurs="0" maxOccurs="1">
            <xsd:annotation>
              <xsd:documentation>Instances of DataClassHasMembers</xsd:documentation>
            </xsd:annotation>
            <xsd:complexType>
              <xsd:sequence>
                <xsd:choice minOccurs="0" maxOccurs="unbounded" >
                  <xsd:element ref="dataClassHasMembers">
                    <xsd:annotation>
                      <xsd:documentation>[Relationship deriving from DataClassHasMembers needs to be serialized in full-form]</xsd:documentation>
                    </xsd:annotation>
                  </xsd:element>
                  <xsd:element ref="fieldOrProperty" >
                    <xsd:annotation>
                      <xsd:documentation>[Target role-player]</xsd:documentation>
                    </xsd:annotation>
                  </xsd:element>
                </xsd:choice>
              </xsd:sequence>
            </xsd:complexType>
          </xsd:element>
          <!-- Relationship: DataClassUsesDataClasses -->
          <xsd:element name="usedDataTypes" minOccurs="0" maxOccurs="1">
            <xsd:annotation>
              <xsd:documentation>Instances of DataClassUsesDataClasses</xsd:documentation>
            </xsd:annotation>
            <xsd:complexType>
              <xsd:sequence>
                <xsd:element ref="dataClassUsesDataClasses" minOccurs="0" maxOccurs="unbounded">
                  <xsd:annotation>
                    <xsd:documentation>[Instance of DataClassUsesDataClasses needs to be serialized in full-form]</xsd:documentation>
                  </xsd:annotation>
                </xsd:element>
              </xsd:sequence>
            </xsd:complexType>
          </xsd:element>
        </xsd:sequence>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  
  <!-- DataClass Moniker -->
  <xsd:element name="dataClassMoniker" abstract="true" type="DataClassMoniker" substitutionGroup="typeOfInterestMoniker" />
  <xsd:complexType name="DataClassMoniker">
    <xsd:annotation>
      <xsd:documentation>Moniker for DataClass instance.</xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="TypeOfInterestMoniker">
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  
  <!-- ServiceContractReferencesCallbackContract -->
  <xsd:element name="serviceContractReferencesCallbackContract" abstract="true" type="ServiceContractReferencesCallbackContract" />
  <xsd:complexType name="ServiceContractReferencesCallbackContract" abstract="true" >
    <xsd:sequence minOccurs="0" maxOccurs="1">
      <!-- Target end ServiceContract -->
      <xsd:element ref="serviceContractMoniker" minOccurs="1" maxOccurs="1">
        <xsd:annotation>
          <xsd:documentation>[Target role-player]</xsd:documentation>
        </xsd:annotation>
      </xsd:element>
    </xsd:sequence>
  </xsd:complexType>
  
  <!-- ServiceContractReferencesCallbackContract Moniker -->
  <xsd:element name="serviceContractReferencesCallbackContractMoniker" abstract="true" type="ServiceContractReferencesCallbackContractMoniker" />
  <xsd:complexType name="ServiceContractReferencesCallbackContractMoniker">
    <xsd:annotation>
      <xsd:documentation>Moniker for ServiceContractReferencesCallbackContract instance.</xsd:documentation>
    </xsd:annotation>
  </xsd:complexType>
  
  <!-- ServicesDefinitionHasServices -->
  <xsd:element name="servicesDefinitionHasServices" abstract="true" type="ServicesDefinitionHasServices" />
  <xsd:complexType name="ServicesDefinitionHasServices" abstract="true" >
    <xsd:sequence minOccurs="0" maxOccurs="1">
      <!-- Target end Service -->
      <xsd:element ref="service" minOccurs="1" maxOccurs="1">
        <xsd:annotation>
          <xsd:documentation>[Target role-player]</xsd:documentation>
        </xsd:annotation>
      </xsd:element>
    </xsd:sequence>
  </xsd:complexType>
  
  <!-- ServicesDefinitionHasServices Moniker -->
  <xsd:element name="servicesDefinitionHasServicesMoniker" abstract="true" type="ServicesDefinitionHasServicesMoniker" />
  <xsd:complexType name="ServicesDefinitionHasServicesMoniker">
    <xsd:annotation>
      <xsd:documentation>Moniker for ServicesDefinitionHasServices instance.</xsd:documentation>
    </xsd:annotation>
  </xsd:complexType>
  
  <!-- ServiceReferencesImplementedServiceContracts -->
  <xsd:element name="serviceReferencesImplementedServiceContracts" abstract="true" type="ServiceReferencesImplementedServiceContracts" />
  <xsd:complexType name="ServiceReferencesImplementedServiceContracts" abstract="true" >
    <xsd:sequence minOccurs="0" maxOccurs="1">
      <!-- Target end ServiceContract -->
      <xsd:element ref="serviceContractMoniker" minOccurs="1" maxOccurs="1">
        <xsd:annotation>
          <xsd:documentation>[Target role-player]</xsd:documentation>
        </xsd:annotation>
      </xsd:element>
    </xsd:sequence>
  </xsd:complexType>
  
  <!-- ServiceReferencesImplementedServiceContracts Moniker -->
  <xsd:element name="serviceReferencesImplementedServiceContractsMoniker" abstract="true" type="ServiceReferencesImplementedServiceContractsMoniker" />
  <xsd:complexType name="ServiceReferencesImplementedServiceContractsMoniker">
    <xsd:annotation>
      <xsd:documentation>Moniker for ServiceReferencesImplementedServiceContracts instance.</xsd:documentation>
    </xsd:annotation>
  </xsd:complexType>
  
  <!-- ServicesDefinitionHasInterfaces -->
  <xsd:element name="servicesDefinitionHasInterfaces" abstract="true" type="ServicesDefinitionHasInterfaces" />
  <xsd:complexType name="ServicesDefinitionHasInterfaces" abstract="true" >
    <xsd:sequence minOccurs="0" maxOccurs="1">
      <!-- Target end Interface -->
      <xsd:element ref="interface" minOccurs="1" maxOccurs="1">
        <xsd:annotation>
          <xsd:documentation>[Target role-player]</xsd:documentation>
        </xsd:annotation>
      </xsd:element>
    </xsd:sequence>
  </xsd:complexType>
  
  <!-- ServicesDefinitionHasInterfaces Moniker -->
  <xsd:element name="servicesDefinitionHasInterfacesMoniker" abstract="true" type="ServicesDefinitionHasInterfacesMoniker" />
  <xsd:complexType name="ServicesDefinitionHasInterfacesMoniker">
    <xsd:annotation>
      <xsd:documentation>Moniker for ServicesDefinitionHasInterfaces instance.</xsd:documentation>
    </xsd:annotation>
  </xsd:complexType>
  
  <!-- InterfaceHasMethods -->
  <xsd:element name="interfaceHasMethods" abstract="true" type="InterfaceHasMethods" />
  <xsd:complexType name="InterfaceHasMethods" abstract="true" >
    <xsd:annotation>
      <xsd:documentation>An interface owns methods.</xsd:documentation>
    </xsd:annotation>
    <xsd:sequence minOccurs="0" maxOccurs="1">
      <!-- Target end Method -->
      <xsd:element ref="method" minOccurs="1" maxOccurs="1">
        <xsd:annotation>
          <xsd:documentation>[Target role-player]</xsd:documentation>
        </xsd:annotation>
      </xsd:element>
    </xsd:sequence>
  </xsd:complexType>
  
  <!-- InterfaceHasMethods Moniker -->
  <xsd:element name="interfaceHasMethodsMoniker" abstract="true" type="InterfaceHasMethodsMoniker" />
  <xsd:complexType name="InterfaceHasMethodsMoniker">
    <xsd:annotation>
      <xsd:documentation>Moniker for InterfaceHasMethods instance.</xsd:documentation>
    </xsd:annotation>
  </xsd:complexType>
  
  <!-- ServicesDefinitionHasDataContracts -->
  <xsd:element name="servicesDefinitionHasDataContracts" type="ServicesDefinitionHasDataContracts" substitutionGroup="servicesDefinitionHasDataClasses" />
  <xsd:complexType name="ServicesDefinitionHasDataContracts">
    <xsd:complexContent>
      <xsd:extension base="ServicesDefinitionHasDataClasses">
        <xsd:sequence minOccurs="0" maxOccurs="1">
        </xsd:sequence>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  
  <!-- ServicesDefinitionHasDataContracts Moniker -->
  <xsd:element name="servicesDefinitionHasDataContractsMoniker" abstract="true" type="ServicesDefinitionHasDataContractsMoniker" substitutionGroup="servicesDefinitionHasDataClassesMoniker" />
  <xsd:complexType name="ServicesDefinitionHasDataContractsMoniker">
    <xsd:annotation>
      <xsd:documentation>Moniker for ServicesDefinitionHasDataContracts instance.</xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="ServicesDefinitionHasDataClassesMoniker">
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  
  <!-- DataContractHasDataMembers -->
  <xsd:element name="dataContractHasDataMembers" type="DataContractHasDataMembers" substitutionGroup="dataClassHasMembers" />
  <xsd:complexType name="DataContractHasDataMembers">
    <xsd:complexContent>
      <xsd:extension base="DataClassHasMembers">
        <xsd:sequence minOccurs="0" maxOccurs="1">
        </xsd:sequence>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  
  <!-- DataContractHasDataMembers Moniker -->
  <xsd:element name="dataContractHasDataMembersMoniker" abstract="true" type="DataContractHasDataMembersMoniker" substitutionGroup="dataClassHasMembersMoniker" />
  <xsd:complexType name="DataContractHasDataMembersMoniker">
    <xsd:annotation>
      <xsd:documentation>Moniker for DataContractHasDataMembers instance.</xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="DataClassHasMembersMoniker">
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  
  <!-- ServicesDefinitionHasHosting -->
  <xsd:element name="servicesDefinitionHasHosting" abstract="true" type="ServicesDefinitionHasHosting" />
  <xsd:complexType name="ServicesDefinitionHasHosting" abstract="true" >
    <xsd:sequence minOccurs="0" maxOccurs="1">
      <!-- Target end Hosting -->
      <xsd:element ref="hosting" minOccurs="1" maxOccurs="1">
        <xsd:annotation>
          <xsd:documentation>[Target role-player]</xsd:documentation>
        </xsd:annotation>
      </xsd:element>
    </xsd:sequence>
  </xsd:complexType>
  
  <!-- ServicesDefinitionHasHosting Moniker -->
  <xsd:element name="servicesDefinitionHasHostingMoniker" abstract="true" type="ServicesDefinitionHasHostingMoniker" />
  <xsd:complexType name="ServicesDefinitionHasHostingMoniker">
    <xsd:annotation>
      <xsd:documentation>Moniker for ServicesDefinitionHasHosting instance.</xsd:documentation>
    </xsd:annotation>
  </xsd:complexType>
  
  <!-- HostingReferencesHostedServices -->
  <xsd:element name="hostingReferencesHostedServices" abstract="true" type="HostingReferencesHostedServices" />
  <xsd:complexType name="HostingReferencesHostedServices" abstract="true" >
    <xsd:sequence minOccurs="0" maxOccurs="1">
      <!-- Target end Service -->
      <xsd:element ref="serviceMoniker" minOccurs="1" maxOccurs="1">
        <xsd:annotation>
          <xsd:documentation>[Target role-player]</xsd:documentation>
        </xsd:annotation>
      </xsd:element>
    </xsd:sequence>
  </xsd:complexType>
  
  <!-- HostingReferencesHostedServices Moniker -->
  <xsd:element name="hostingReferencesHostedServicesMoniker" abstract="true" type="HostingReferencesHostedServicesMoniker" />
  <xsd:complexType name="HostingReferencesHostedServicesMoniker">
    <xsd:annotation>
      <xsd:documentation>Moniker for HostingReferencesHostedServices instance.</xsd:documentation>
    </xsd:annotation>
  </xsd:complexType>
  
  <!-- ServicesDefinitionHasMessageContracts -->
  <xsd:element name="servicesDefinitionHasMessageContracts" type="ServicesDefinitionHasMessageContracts" substitutionGroup="servicesDefinitionHasDataClasses" />
  <xsd:complexType name="ServicesDefinitionHasMessageContracts">
    <xsd:complexContent>
      <xsd:extension base="ServicesDefinitionHasDataClasses">
        <xsd:sequence minOccurs="0" maxOccurs="1">
        </xsd:sequence>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  
  <!-- ServicesDefinitionHasMessageContracts Moniker -->
  <xsd:element name="servicesDefinitionHasMessageContractsMoniker" abstract="true" type="ServicesDefinitionHasMessageContractsMoniker" substitutionGroup="servicesDefinitionHasDataClassesMoniker" />
  <xsd:complexType name="ServicesDefinitionHasMessageContractsMoniker">
    <xsd:annotation>
      <xsd:documentation>Moniker for ServicesDefinitionHasMessageContracts instance.</xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="ServicesDefinitionHasDataClassesMoniker">
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  
  <!-- MessageContractHasMessageMembers -->
  <xsd:element name="messageContractHasMessageMembers" type="MessageContractHasMessageMembers" substitutionGroup="dataClassHasMembers" />
  <xsd:complexType name="MessageContractHasMessageMembers">
    <xsd:complexContent>
      <xsd:extension base="DataClassHasMembers">
        <xsd:sequence minOccurs="0" maxOccurs="1">
        </xsd:sequence>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  
  <!-- MessageContractHasMessageMembers Moniker -->
  <xsd:element name="messageContractHasMessageMembersMoniker" abstract="true" type="MessageContractHasMessageMembersMoniker" substitutionGroup="dataClassHasMembersMoniker" />
  <xsd:complexType name="MessageContractHasMessageMembersMoniker">
    <xsd:annotation>
      <xsd:documentation>Moniker for MessageContractHasMessageMembers instance.</xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="DataClassHasMembersMoniker">
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  
  <!-- DataClassHasMembers -->
  <xsd:element name="dataClassHasMembers" abstract="true" type="DataClassHasMembers" />
  <xsd:complexType name="DataClassHasMembers" abstract="true" >
    <xsd:annotation>
      <xsd:documentation>A data class has members which are data members</xsd:documentation>
    </xsd:annotation>
    <xsd:sequence minOccurs="0" maxOccurs="1">
      <!-- Target end FieldOrProperty -->
      <xsd:element ref="fieldOrProperty" minOccurs="1" maxOccurs="1">
        <xsd:annotation>
          <xsd:documentation>[Target role-player]</xsd:documentation>
        </xsd:annotation>
      </xsd:element>
    </xsd:sequence>
  </xsd:complexType>
  
  <!-- DataClassHasMembers Moniker -->
  <xsd:element name="dataClassHasMembersMoniker" abstract="true" type="DataClassHasMembersMoniker" />
  <xsd:complexType name="DataClassHasMembersMoniker">
    <xsd:annotation>
      <xsd:documentation>Moniker for DataClassHasMembers instance.</xsd:documentation>
    </xsd:annotation>
  </xsd:complexType>
  
  <!-- ServicesDefinitionHasDataClasses -->
  <xsd:element name="servicesDefinitionHasDataClasses" abstract="true" type="ServicesDefinitionHasDataClasses" />
  <xsd:complexType name="ServicesDefinitionHasDataClasses" abstract="true" >
    <xsd:sequence minOccurs="0" maxOccurs="1">
      <!-- Target end DataClass -->
      <xsd:element ref="dataClass" minOccurs="1" maxOccurs="1">
        <xsd:annotation>
          <xsd:documentation>[Target role-player]</xsd:documentation>
        </xsd:annotation>
      </xsd:element>
    </xsd:sequence>
  </xsd:complexType>
  
  <!-- ServicesDefinitionHasDataClasses Moniker -->
  <xsd:element name="servicesDefinitionHasDataClassesMoniker" abstract="true" type="ServicesDefinitionHasDataClassesMoniker" />
  <xsd:complexType name="ServicesDefinitionHasDataClassesMoniker">
    <xsd:annotation>
      <xsd:documentation>Moniker for ServicesDefinitionHasDataClasses instance.</xsd:documentation>
    </xsd:annotation>
  </xsd:complexType>
  
  <!-- DataClassUsesDataClasses -->
  <xsd:element name="dataClassUsesDataClasses" type="DataClassUsesDataClasses" />
  <xsd:complexType name="DataClassUsesDataClasses">
    <xsd:sequence minOccurs="0" maxOccurs="1">
      <!-- Target end DataClass -->
      <xsd:element ref="dataClassMoniker" minOccurs="1" maxOccurs="1">
        <xsd:annotation>
          <xsd:documentation>[Target role-player]</xsd:documentation>
        </xsd:annotation>
      </xsd:element>
      <!-- Relationship: IsAnotherRepresentationFor -->
      <xsd:element name="representedDataMember" minOccurs="1" maxOccurs="1">
        <xsd:annotation>
          <xsd:documentation>Instance of IsAnotherRepresentationFor</xsd:documentation>
        </xsd:annotation>
        <xsd:complexType>
          <xsd:sequence>
            <xsd:choice minOccurs="1" maxOccurs="1" >
              <xsd:element ref="isAnotherRepresentationFor">
                <xsd:annotation>
                  <xsd:documentation>[Relationship deriving from IsAnotherRepresentationFor needs to be serialized in full-form]</xsd:documentation>
                </xsd:annotation>
              </xsd:element>
              <xsd:element ref="fieldOrPropertyMoniker" >
                <xsd:annotation>
                  <xsd:documentation>[Target role-player]</xsd:documentation>
                </xsd:annotation>
              </xsd:element>
            </xsd:choice>
          </xsd:sequence>
        </xsd:complexType>
      </xsd:element>
    </xsd:sequence>
    <!-- Id -->
    <xsd:attribute name="Id" type="xsd:string">
      <xsd:annotation>
        <xsd:documentation>Instance Guid of this element, needed because SerializeId is set to true.</xsd:documentation>
      </xsd:annotation>
    </xsd:attribute>
    <!-- Property: RoleName -->
    <xsd:attribute name="roleName" type="xsd:string" />
    <!-- Property: Kind -->
    <xsd:attribute name="kind" type="DataMemberKind" />
  </xsd:complexType>
  
  <!-- DataClassUsesDataClasses Moniker -->
  <xsd:element name="dataClassUsesDataClassesMoniker" type="DataClassUsesDataClassesMoniker" />
  <xsd:complexType name="DataClassUsesDataClassesMoniker">
    <xsd:annotation>
      <xsd:documentation>Moniker for DataClassUsesDataClasses instance.</xsd:documentation>
    </xsd:annotation>
    <xsd:attribute name="Id" type="xsd:string" >
      <xsd:annotation>
        <xsd:documentation>Attribute to store the moniker string.</xsd:documentation>
      </xsd:annotation>
    </xsd:attribute>
  </xsd:complexType>
  
  <!-- IsAnotherRepresentationFor -->
  <xsd:element name="isAnotherRepresentationFor" abstract="true" type="IsAnotherRepresentationFor" />
  <xsd:complexType name="IsAnotherRepresentationFor" abstract="true" >
    <xsd:sequence minOccurs="0" maxOccurs="1">
      <!-- Target end FieldOrProperty -->
      <xsd:element ref="fieldOrPropertyMoniker" minOccurs="1" maxOccurs="1">
        <xsd:annotation>
          <xsd:documentation>[Target role-player]</xsd:documentation>
        </xsd:annotation>
      </xsd:element>
    </xsd:sequence>
  </xsd:complexType>
  
  <!-- IsAnotherRepresentationFor Moniker -->
  <xsd:element name="isAnotherRepresentationForMoniker" abstract="true" type="IsAnotherRepresentationForMoniker" />
  <xsd:complexType name="IsAnotherRepresentationForMoniker">
    <xsd:annotation>
      <xsd:documentation>Moniker for IsAnotherRepresentationFor instance.</xsd:documentation>
    </xsd:annotation>
  </xsd:complexType>
  
  <!-- ServiceContractReferencesDataContracts -->
  <xsd:element name="serviceContractReferencesDataContracts" abstract="true" type="ServiceContractReferencesDataContracts" />
  <xsd:complexType name="ServiceContractReferencesDataContracts" abstract="true" >
    <xsd:sequence minOccurs="0" maxOccurs="1">
      <!-- Target end DataClass -->
      <xsd:element ref="dataClassMoniker" minOccurs="1" maxOccurs="1">
        <xsd:annotation>
          <xsd:documentation>[Target role-player]</xsd:documentation>
        </xsd:annotation>
      </xsd:element>
    </xsd:sequence>
  </xsd:complexType>
  
  <!-- ServiceContractReferencesDataContracts Moniker -->
  <xsd:element name="serviceContractReferencesDataContractsMoniker" abstract="true" type="ServiceContractReferencesDataContractsMoniker" />
  <xsd:complexType name="ServiceContractReferencesDataContractsMoniker">
    <xsd:annotation>
      <xsd:documentation>Moniker for ServiceContractReferencesDataContracts instance.</xsd:documentation>
    </xsd:annotation>
  </xsd:complexType>
  
  <!-- Enum DataMemberKind -->
  <xsd:simpleType name="DataMemberKind">
    <xsd:restriction base="xsd:string">
      <xsd:enumeration value="Property">
        <xsd:annotation>
          <xsd:documentation>Implementation as a property</xsd:documentation>
        </xsd:annotation>
      </xsd:enumeration>
      <xsd:enumeration value="Field">
        <xsd:annotation>
          <xsd:documentation>Implementation as a field</xsd:documentation>
        </xsd:annotation>
      </xsd:enumeration>
    </xsd:restriction>
  </xsd:simpleType>
  
  <!-- Enum Visibility -->
  <xsd:simpleType name="Visibility">
    <xsd:restriction base="xsd:string">
      <xsd:enumeration value="Public"/>
      <xsd:enumeration value="Protected"/>
      <xsd:enumeration value="Private"/>
      <xsd:enumeration value="Internal"/>
    </xsd:restriction>
  </xsd:simpleType>
  
  <!-- Enum HostingKind -->
  <xsd:simpleType name="HostingKind">
    <xsd:annotation>
      <xsd:documentation>Kind of hosting</xsd:documentation>
    </xsd:annotation>
    <xsd:restriction base="xsd:string">
      <xsd:enumeration value="Console">
        <xsd:annotation>
          <xsd:documentation>Console application</xsd:documentation>
        </xsd:annotation>
      </xsd:enumeration>
      <xsd:enumeration value="IIS">
        <xsd:annotation>
          <xsd:documentation>Internet Information Server Web Server</xsd:documentation>
        </xsd:annotation>
      </xsd:enumeration>
      <xsd:enumeration value="WAS">
        <xsd:annotation>
          <xsd:documentation>Service hosting in Vista</xsd:documentation>
        </xsd:annotation>
      </xsd:enumeration>
      <xsd:enumeration value="OsService">
        <xsd:annotation>
          <xsd:documentation>Service of the operating system</xsd:documentation>
        </xsd:annotation>
      </xsd:enumeration>
    </xsd:restriction>
  </xsd:simpleType>
  
  <!-- Enum GenerationKind -->
  <xsd:simpleType name="GenerationKind">
    <xsd:annotation>
      <xsd:documentation>Where is the type generated ?</xsd:documentation>
    </xsd:annotation>
    <xsd:restriction base="xsd:string">
      <xsd:enumeration value="GeneratedInProject">
        <xsd:annotation>
          <xsd:documentation>The type was generated in the project</xsd:documentation>
        </xsd:annotation>
      </xsd:enumeration>
      <xsd:enumeration value="GeneratedInReference">
        <xsd:annotation>
          <xsd:documentation>The type was generated in a project reference</xsd:documentation>
        </xsd:annotation>
      </xsd:enumeration>
      <xsd:enumeration value="NotGenerated">
        <xsd:annotation>
          <xsd:documentation>The type was not generated</xsd:documentation>
        </xsd:annotation>
      </xsd:enumeration>
    </xsd:restriction>
  </xsd:simpleType>
  
  <!-- Enum RepresentationKind -->
  <xsd:simpleType name="RepresentationKind">
    <xsd:annotation>
      <xsd:documentation>Kind of representation</xsd:documentation>
    </xsd:annotation>
    <xsd:restriction base="xsd:string">
      <xsd:enumeration value="AsMember">
        <xsd:annotation>
          <xsd:documentation>Representation as a member in the compartment</xsd:documentation>
        </xsd:annotation>
      </xsd:enumeration>
      <xsd:enumeration value="AsRole">
        <xsd:annotation>
          <xsd:documentation>Representation as a role of a relationship</xsd:documentation>
        </xsd:annotation>
      </xsd:enumeration>
      <xsd:enumeration value="Hidden">
        <xsd:annotation>
          <xsd:documentation>The member is hidden</xsd:documentation>
        </xsd:annotation>
      </xsd:enumeration>
    </xsd:restriction>
  </xsd:simpleType>
  
  <!-- Enum MessageMemberKind -->
  <xsd:simpleType name="MessageMemberKind">
    <xsd:annotation>
      <xsd:documentation>Kind of member in a Message Contract</xsd:documentation>
    </xsd:annotation>
    <xsd:restriction base="xsd:string">
      <xsd:enumeration value="Normal">
        <xsd:annotation>
          <xsd:documentation>Regular member</xsd:documentation>
        </xsd:annotation>
      </xsd:enumeration>
      <xsd:enumeration value="MessageBody">
        <xsd:annotation>
          <xsd:documentation>Message body member</xsd:documentation>
        </xsd:annotation>
      </xsd:enumeration>
      <xsd:enumeration value="MessageHeader">
        <xsd:annotation>
          <xsd:documentation>Message header member</xsd:documentation>
        </xsd:annotation>
      </xsd:enumeration>
      <xsd:enumeration value="MessageHeaderArray"/>
    </xsd:restriction>
  </xsd:simpleType>
  
</xsd:schema>

